using System;
using System.Collections.Generic;

namespace MetaObjects.Contracts
{
	public interface IMetaEntity : IEntity
	{
		string InternalName { get; }
		string DisplayName { get; set; }
		string Description { get; set; }
		IEntityCollection<IMetaField> MetaFields { get; }
		Func<object> Factory { get; }
		//Func<object, object> KeyAccessor { get; set; }
	}

	public interface IMetaEntity<TEntity> : IMetaEntity
	{
		new Func<TEntity> Factory { get; }
		//new Func<TEntity, object> KeyAccessor { get; set; }
	}

	public interface IMetaEntity<TKey, TEntity> : IMetaEntity<TEntity>
	{
		//new Func<TEntity, TKey> KeyAccessor { get; set; }
	}
}